package y_2025.m03.d21.t04;

import java.util.Scanner;

public class Main {
    // 定义常量
    static final int N = (int) 3e4 + 10; // 数组大小
    static final long M = (long) 1e10;   // 模数
    static int n, m, cnt;                // n 和 m 是输入值，cnt 是素数个数
    static int[] prime = new int[N];     // 存储素数的数组
    static int[] power = new int[N];     // 存储每个素数的幂次
    static boolean[] st = new boolean[N]; // 标记是否为合数
    static long ans = 1;                 // 最终结果

    // 欧拉筛法（线性筛法）生成素数
    static void ola(int x) {
        for (int i = 2; i <= x; i++) {
            if (!st[i]) { // 如果 i 是素数
                prime[cnt++] = i; // 将 i 存入素数数组
            }
            for (int j = 0; j < cnt; j++) {
                if(i * prime[j] > n) {
                    break;
                }
                st[prime[j] * i] = true; // 标记 prime[j] * i 为合数
                if (i % prime[j] == 0) { // 如果 i 能被 prime[j] 整除，跳出循环
                    break;
                }
            }
        }
    }

    // 计算 n! 中每个素数的幂次
    static void only(int n, int flag) {
        for (int i = 0; i < cnt; i++) {
            long fac = prime[i], sum = 0; // fac 是当前素数，sum 是幂次
            while (fac <= n) { // 计算 n! 中 prime[i] 的幂次
                sum += n / fac;
                fac *= prime[i];
            }
            if (flag == 1) power[i] += sum; // 根据 flag 增加或减少幂次
            else power[i] -= sum;
        }
    }

    // 计算 p^n 并对结果取模 M，然后与 ans 相乘
    static void mul(int p, int n) {
        long fac = 1;
        for (int i = 1; i <= n; i++) {
            fac = fac * p % M; // 计算 p^n 并对 M 取模
        }
        ans = (ans * fac) % M; // 将结果与 ans 相乘
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 输入 n 和 m
        n = scanner.nextInt();
        m = scanner.nextInt();

        // 生成素数
        ola(n);

        // 计算组合数 C(n, m) 中每个素数的幂次
        only(n, 1);     // 计算 n! 的素数幂次
        only(m, -1);    // 减去 m! 的素数幂次
        only(n - m, -1); // 减去 (n - m)! 的素数幂次

        // 根据幂次计算结果
        for (int i = 0; i < cnt; i++) {
            if (power[i] != 0) { // 如果当前素数的幂次不为 0
                mul(prime[i], power[i]); // 计算 prime[i]^power[i] 并累乘到 ans
            }
        }

        // 输出结果，格式化为 10 位数字，不足部分补零
        System.out.printf("%010d\n", ans);
    }
}